javascript algorithms